package com.xw.Service;

import java.util.List;

import javax.mail.Message;

import com.xw.Beans.SaveMail;
import com.xw.Beans.SaveMailAttachment;
import com.xw.Beans.SendingMail;
import com.xw.Model.Page;

public interface MailService{
	/**
	 * 保存邮件
	 * @param mail	邮件对象
	 */
	public void saveMail(SaveMail mail);
	
	/**
	 * 分页获取邮件
	 * @return
	 */
	public Page<SaveMail> getMailPage(Page<SaveMail> page);
	
	/**
	 * 获取邮件的总记录数
	 * @return
	 */
	public int getTotalCount();
	
	/**
	 * 根据邮件id获取邮件详情
	 * @param mid 邮件id
	 * @return
	 */
	public SaveMail getMailById(String mid);
	
	/**
	 * 描述：发送邮件，附件通过url的形式
	 * @author 杨建全
	 * @date 2017年5月26日
	 * @param whichMailBox
	 * @param mail
	 */
	public boolean sendMail(String whichMailBox, SendingMail mail);

	/**
	 * 描述：将待发送的邮件加入到待发送队列中
	 * @author 杨建全
	 * @date 2017年3月27日
	 * @param mail
	 */
	public void pushToMailSenderQueue(SendingMail mail);

	/**
	 * 保存邮件附件
	 * @param mailAttachmentsList
	 */
	public void saveAttachments(List<SaveMailAttachment> mailAttachmentsList);

	/**
	 * 描述：更新邮件接入状态
	 * @author 杨建全
	 * @date 2017年4月17日
	 * @param mailId
	 * @param status
	 */
	public void updateMailCallStatus(String mailId, int status);
	
	/**
	 * 描述：加入邮件到待通知坐席的队列中
	 * @author 杨建全
	 * @date 2017年6月5日
	 * @param mail
	 */
	public void offerNotifyMailQueue(SaveMail mail);
	
	/**
	 * 描述：待解析的邮件队列
	 * @author 杨建全
	 * @date 2017年6月5日
	 * @param message
	 */
	public void offerNewMailQueue(Message message);
	
	/**
	 * 描述：获取待解析的邮件
	 * @author 杨建全
	 * @date 2017年6月5日
	 * @return
	 */
	public Message pollNewMailQueue();
	/**
	 * 描述：获取附件序列号id
	 * @author 杨建全
	 * @date 2017年6月6日
	 * @return
	 */
	public String getAttachmentId();

	/**
	 * 描述：获取一定数量的未接入给坐席的邮件
	 * @author 杨建全
	 * @date 2017年6月21日
	 * @param num
	 * @return
	 */
	public List<SaveMail> getSomeUnAccessMails(int num);
}
